package we_chat_group

import (
	"fmt"
	"github.com/eatmoreapple/openwechat"
	"server/src/global"
	"server/src/model"
	"server/src/server"
)

type RobotInfo struct {
	Bot           *openwechat.Bot
	LoginiCodeUrl chan string // 改为管道
	Group         *openwechat.Group
	GroupInfo     *model.WeChatGroup
}

var (
	ROBOTS         = make(map[string]*RobotInfo, 3)
	TempLoginToken = ""
)

// 显示二维码
func ConsoleQrCode(uuid string) {
	//q, _ := qrcode.New("https://login.weixin.qq.com/l/"+uuid, qrcode.Low)
	acode := openwechat.GetQrcodeUrl(uuid)
	ROBOTS[TempLoginToken].LoginiCodeUrl <- acode // 发送到管道
	fmt.Println("这个二维码链接为：", acode)
}

// 获取微信机器人登录二维码进行登录
func GetRobotQrcodeUrl(loginToken string) {
	TempLoginToken = loginToken

	bot := openwechat.DefaultBot(openwechat.Desktop) // 桌面模式
	bot.UUIDCallback = ConsoleQrCode

	// 热登陆
	reloadStorage := openwechat.NewFileHotReloadStorage(loginToken + ".json")
	defer reloadStorage.Close()

	//if err := bot.HotLogin(reloadStorage); err != nil {
	//	fmt.Println("not HotLogin")
	if err := bot.Login(); err != nil {
		fmt.Println(err)
		return
	}
	//}
	// 获取登陆的用户
	self, err := bot.GetCurrentUser()
	if err != nil {
		fmt.Println(err)
		return
	}
	//获取群聊
	groups, err := self.Groups()
	if err != nil || groups.Count() != 1 {
		fmt.Println("获取用户群出现错误", groups.Count())
		return
	}
	ROBOTS[loginToken].Group = groups[0]
	//更新群的信息
	wxGroup := &model.WeChatGroup{
		LoginToken:      loginToken,
		RobotWeChat:     groups[0].UserName,
		UserNum:         groups[0].MemberCount,
		WeChatGroupName: groups[0].NickName,
	}
	groupInfo, err := server.ServerRobotUser.UpdateRobotGroupInfo(wxGroup)
	if err != nil {
		global.GVL_LOG.Error("更新群的信息失败", err)
		fmt.Println("更新群的信息失败")
	}
	ROBOTS[loginToken].GroupInfo = groupInfo
	//识别指令
	bot.MessageHandler = func(msg *openwechat.Message) {
		if msg.IsText() {
			msgSendUser, err := msg.SenderInGroup()
			if err != nil {
				global.GVL_LOG.Error("获取消息用户失败", err)
				fmt.Println("获取消息用户失败")
			}
			groupUser := &model.WeChatGroupUser{
				Gid:      groupInfo.Id,
				WxUserId: msgSendUser.UserName,
				Name:     msgSendUser.NickName,
			}
			//更新群用户信息
			groupUser, err = server.ServerRobotUser.UpdateRobotGroupUserInfo(groupUser)
			if err != nil {
				global.GVL_LOG.Error("更新群用户信息失败", err)
				fmt.Println("更新群用户信息失败", err)
			}
			if err := robotInstruct(msg, msgSendUser, groupUser); err != nil {
				global.GVL_LOG.Error("执行指令失败", err)
				fmt.Println("执行指令失败", err)
			}
		}
	}
	ROBOTS[loginToken].Bot = bot

	// 阻塞主goroutine, 直到发生异常或者用户主动退出
	bot.Block()
}
